CMake常用命令(六)link 您所在的位置:网站首页 cmakelist list 加m dl CMake常用命令(六)link

CMake常用命令(六)link

2024-07-09 16:16| 来源: 网络整理| 查看: 265

文章目录 link_libraries语法作用参数举例 target_link_libraries作用语法参数作用举例 两者的区别include_directories:target_include_directories:使用建议 注意事项参考

link_libraries 语法 link_libraries([item1 [item2 [...]]] [[debug|optimized|general] ] ...) 作用

将库链接到稍后添加的所有目标。

参数 举例

假设当前系统的cmake版本为3.10.2

cmake_minimum_required(VERSION 2.8 FATAL_ERROR) include_directories("/opt/MATLAB/R2012a/extern/include") #directly link to the libraries. LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so") LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libmx.so") #equals to below #LINK_LIBRARIES("/opt/MATLAB/R2012a/bin/glnxa64/libeng.so" "/opt/MATLAB/R2012a/bin/glnxa64/libmx.so") add_executable(myProject main.cpp) target_link_libraries 作用

指定链接给定目标和/或其依赖项时要使用的库或标志。将传播链接库目标的使用要求。目标依赖项的使用要求会影响其自身源的编译。

语法 target_link_libraries( ... ... ...) target_link_libraries( ... [ ...]...) 参数

PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。

PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库 INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号。

作用

该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add _ Executive ()或 add _ library ()之类的命令创建的,并且不能是 ALIAS 目标。

举例 # 以下写法都可以: target_link_libraries(myProject comm) # 连接libhello.so库,默认优先链接动态库 target_link_libraries(myProject libcomm.a) # 显示指定链接静态库 target_link_libraries(myProject libcomm.so) # 显示指定链接动态库 # 再如: target_link_libraries(myProject libcomm.so)  #这些库名写法都可以。 target_link_libraries(myProject comm) target_link_libraries(myProject -lcomm) 两者的区别 include_directories:

link_libraries用在add_executable之前,target_link_libraries用在add_executable之后

target_include_directories:

link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照header file + .lib + .dll方式隐式调用动态库的.lib库

使用建议

target_include_directories() 的功能完全可以使用 include_directories() 实现。但是我还是建议使用 target_include_directories()。为什么?保持清晰!

include_directories(header-dir) 是一个全局包含,向下传递。什么意思呢?就是说如果某个目录的 CMakeLists.txt 中使用了该指令,其下所有的子目录默认也包含了header-dir 目录。

注意事项

​​​​​​​target_link_libraries 会在目标程序中生成rpath, 这点请注意 。

参考

官方文档link_libraries 官方文档target_link_libraries cmake学习笔记之add_library、target_link_libraries和link_directories

link_libraries 和 target_link_libraries 区别

cmake target_link_libraries 中的PRIVATE, PUBLIC, INTERFACE 详解



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有